package org.apache.ibatis.common.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Executable;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Name ParamNameUtil
 * @Description: 方法参数名称工具类
 * 描述信息：提供获取构造器及普通方法的参数名称列表的功能。
 * @Version v1.0.0
 * @Author: lichao
 * @Date: 2024-04-28 16:51:44
 **/
public class ParamNameUtil {

    private ParamNameUtil() {
    }

    public static List<String> getParamNames(Constructor<?> constructor) {
        return getParameterNames(constructor);
    }

    public static List<String> getParamNames(Method method) {
        return getParameterNames(method);
    }

    /**
     * 获取目标方法的参数列表
     * 提示：Executable 的子类包含了构造器和普通方法。
     *
     * @param executable
     * @return java.util.List<java.lang.String>
     * @version v1.0.0
     * @author lichao
     * @date 2024-04-28 16:54:36
     */
    private static List<String> getParameterNames(Executable executable) {
        return Arrays.stream(executable.getParameters()).map(Parameter::getName).collect(Collectors.toList());
    }

}

